﻿using System.Collections.Generic;
using System.Text;
using todo.Model;

namespace todo
{
    public class AppFuncs
    {
        public static string GetColWidthsString(List<double> colWidths)
        {
            var widths = "";
            foreach (var width in colWidths)
            {
                if (widths.Length > 0)
                {
                    widths += ',';
                }
                widths += width.ToString("F2");
            }
            return widths;
        }

        public static List<Todo> GetFlatTodoList(TodoList todoList)
        {
            var result = new List<Todo>();
            var todos = todoList.Todos;
            CollectTodos(todos, result);
            return result;
        }

        private static void CollectTodos(IList<Todo> todos, List<Todo> result)
        {
            if(todos == null)
            {
                return;
            }
            foreach (var todo in todos)
            {
                result.Add(todo);
                CollectTodos(todo.Todos, result);
            }
        }

        public static string GetPathTitle(Todo todo)
        {
            string result = null;
            while (todo != null)
            {
                if(result == null)
                {
                    result = "/" + todo.Title;
                }
                else
                {
                    result = "/" + todo.Title + result;
                }
                todo = todo.Parent;
            }
            return result;
        }


        private static void UpdateTransientInfos(Todo todo)
        {
            var children = todo.Todos;
            if (children != null)
            {
                var count = children.Count;
                for (var n = 0; n < count; n++)
                {
                    var child = children[n];
                    child.Parent = todo;
                    child.IsLastChild = n == count - 1;
                    UpdateTransientInfos(child);
                }
            }
        }

        public static void UpdateTransientInfos(TodoList todoList)
        {
            if (todoList.Todos == null || todoList.Todos.Count == 0)
            {
                return;
            }
            todoList.Todos[todoList.Todos.Count - 1].IsLastChild = true;
            foreach (var todo in todoList.Todos)
            {
                todo.Parent = null;
                UpdateTransientInfos(todo);
            }
        }
    }
}